Enable SCR_EL3.SIF bit
authorSoby Mathew <[email protected]>
Mon, 4 Apr 2016 11:34:24 +0000 (12:34 +0100)
committerSoby Mathew <[email protected]>
Thu, 7 Apr 2016 15:30:45 +0000 (16:30 +0100)
This patch enables the SCR_EL3.SIF (Secure Instruction Fetch) bit in BL1 and
BL31 common architectural setup code. When in secure state, this disables
instruction fetches from Non-secure memory.

NOTE: THIS COULD BREAK PLATFORMS THAT HAVE SECURE WORLD CODE EXECUTING FROM
NON-SECURE MEMORY, BUT THIS IS CONSIDERED UNLIKELY AND IS A SERIOUS SECURITY
RISK.

Fixes ARM-Software/tf-issues#372

Change-Id: I684e84b8d523c3b246e9a5fabfa085b6405df319

docs/firmware-design.md
include/common/el3_common_macros.S

index fe3c3f03226c8f5a0825d2fbbc6a44267fc4fcec..87bdb884c0be8e535635301a69266ad38462d788 100644 (file)
@@ -176,7 +176,9 @@ BL1 performs minimal architectural initialization as follows.
 
     -  `SCR_EL3`. The register width of the next lower exception level is set
         to AArch64 by setting the `SCR.RW` bit. The `SCR.EA` bit is set to trap
-        both External Aborts and SError Interrupts in EL3.
+        both External Aborts and SError Interrupts in EL3. The `SCR.SIF` bit is
+        also set to disable instruction fetches from Non-secure memory when in
+        secure state.
 
     -   `CPTR_EL3`. Accesses to the `CPACR_EL1` register from EL1 or EL2, or the
         `CPTR_EL2` register from EL2 are configured to not trap to EL3 by
index ba80d95d068286b88c0cbccfc893de9527e6cf16..9b22a7345a08f639ed0ec589a5cc3fe2d86ebc6a 100644 (file)
        isb
 
        /* ---------------------------------------------------------------------
-        * Early set RES1 bits in SCR_EL3. Set EA bit as well to catch both
-        * External Aborts and SError Interrupts in EL3.
+        * Early set RES1 bits in SCR_EL3. Set EA bit to catch both
+        * External Aborts and SError Interrupts in EL3 and also the SIF bit
+        * to disable instruction fetches from Non-secure memory.
         * ---------------------------------------------------------------------
         */
-       mov     x0, #(SCR_RES1_BITS | SCR_EA_BIT)
+       mov     x0, #(SCR_RES1_BITS | SCR_EA_BIT | SCR_SIF_BIT)
        msr     scr_el3, x0
        /* ---------------------------------------------------------------------
         * Enable External Aborts and SError Interrupts now that the exception